/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.ngc;

import edu.ucue.ptc.gco.dao.ClienteDAOLocal;
import edu.ucue.ptc.gco.mdl.Cliente;
import edu.ucue.ptc.gco.mdl.Direccion;
import edu.ucue.ptc.gco.util.AtributoInvalidoException;
import edu.ucue.ptc.gco.util.ClienteValidadorException;
import edu.ucue.ptc.gco.util.DireccionValidadorException;
import edu.ucue.ptc.gco.util.NoExisteObjetoException;
import edu.ucue.ptc.gco.util.ValidarAtributoUtil;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author xaferima
 */
@Stateful
@Named(value="clienteManager")
public class ClienteManager implements ClienteManagerLocal{
    @Inject
    private ClienteDAOLocal clienteDao;
    @EJB
    private UsuarioManagerLocal ejbRefUsuario;
    @EJB
    private DireccionManagerLocal ejbRefDireccion;
    
    @Override
    public Cliente crear(Cliente cliente) throws ClienteValidadorException,AtributoInvalidoException{        
        
        try
        {
             ValidarAtributoUtil.validarObjetoNulo("cliente", cliente);
             ValidarAtributoUtil.validarStringNuloVacio("nombres",cliente.getNombres());
            //ValidarAtributoUtil.validarStringNuloVacio("idPersona",cliente.getIdPersona());
            ValidarAtributoUtil.validarStringNuloVacio("apellidos",cliente.getApellidos());
            ValidarAtributoUtil.validarStringNuloVacio("telefono",cliente.getTelefono());
            ValidarAtributoUtil.validarStringNuloVacio("cedulaRuc",cliente.getCedulaRuc());
            ValidarAtributoUtil.validarStringNuloVacio("email",cliente.getEmail());
            System.err.print(cliente.getIdPersona());
            List<Cliente> p=clienteDao.verificarCliente(cliente.getCedulaRuc());                
            if (p==null || p.isEmpty()){
                cliente=clienteDao.crearCliente(cliente);
                return cliente;
            }
            else
            {
                throw new AtributoInvalidoException("Cliente",cliente.getIdPersona(),"EL cliente(ID) ya existe");
            }                    
        } 
        catch(AtributoInvalidoException aie)
        {   
           
            throw new ClienteValidadorException(aie);                      //  throw new AtributoInvalidoException("cliente",cliente.getDescuento(),"Cliente no ingresado");
        }
         catch(Exception e)
        {                  
            //throw new AtributoInvalidoException("cliente",cliente.getDescuento(),"Cliente no ingresado");
            throw new ClienteValidadorException(e);                        
        }
        
        
    }

    @Override
    public Cliente crearClienteD(Cliente cliente,List<Direccion> Ldir, String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException, ClienteValidadorException, DireccionValidadorException 
    {
            ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
            crear(cliente);
            int cont=0;
            while (cont!=Ldir.size())
            {   
                Direccion dir=Ldir.get(cont);
                dir.setPersona(cliente);
                ejbRefDireccion.crear(dir,nombreUsuario, contrasenaUsuario);            
                cont++;
            }
            return cliente;
    }
    
    
    @Override
    public Cliente modificar(Cliente cliente,String nombreUsuario, String contrasenaUsuario) throws ClienteValidadorException, AtributoInvalidoException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        try
        {
            ValidarAtributoUtil.validarObjetoNulo("cliente", cliente);
            ValidarAtributoUtil.validarStringNuloVacio("nombres",cliente.getNombres());
            ValidarAtributoUtil.validarStringNuloVacio("idPersona",String.valueOf(cliente.getIdPersona()));
            ValidarAtributoUtil.validarStringNuloVacio("apellidos",cliente.getApellidos());
            ValidarAtributoUtil.validarStringNuloVacio("telefono",cliente.getTelefono());
            ValidarAtributoUtil.validarStringNuloVacio("cedulaRuc",cliente.getCedulaRuc());
            ValidarAtributoUtil.validarStringNuloVacio("email",cliente.getEmail());
       //List<Persona> p=clienteDao.verificarCliente(cliente.getIdPersona());
                
           // if (p==null || p.isEmpty()){
                 cliente=clienteDao.actualizarCliente(cliente);
                 return cliente;
            //}
            //else
            //{
              //  throw new AtributoInvalidoException("Cliente",cliente.getIdPersona(),"EL cliente(ID) ya existe");
            //}
       
            
           
          }
         catch(AtributoInvalidoException aie)
        {           
            throw new ClienteValidadorException(aie);  
            
        }
         catch(Exception e)
        {                  
            throw new ClienteValidadorException(e);                        
        }
    }

    @Override
    public List<Cliente> listar(String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return clienteDao.listar();
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")

    

    @Override
    public String eliminarPorCedula(String cedula, String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return clienteDao.eliminarPorCedula(cedula);        
    }

    @Override
    public String eliminarPorId(int id, String nombreUsuario, String contrasenaUsuario) throws ClienteValidadorException, AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        try
        {
        ValidarAtributoUtil.validarDoubleCero("idPersona",id);
        return clienteDao.eliminarPorId(id);
        
          }
         catch(Exception e)
        {                  
        
            throw new ClienteValidadorException(e);                        
        }
        
    }

    @Override
    public String eliminar(Cliente cliente, String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return clienteDao.eliminar(cliente);
        
    }

    

    @Override
    public Cliente buscarPorCedula(String cedula, String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return  clienteDao.buscarPorCedula(cedula);
    }

    @Override
    public Cliente buscarPorId(int id, String nombreUsuario, String contrasenaUsuario) throws AtributoInvalidoException {
        ejbRefUsuario.existeUsuario(nombreUsuario, contrasenaUsuario);
        return clienteDao.buscarPorId(id);
    }

    @Override
    public String eliminarEmpleado(Cliente cliente,String usuario, String password) throws NoExisteObjetoException, AtributoInvalidoException{
        ejbRefUsuario.existeUsuario(usuario, password);
        Cliente emp=buscarPorId(cliente.getIdPersona(), usuario, password);
        if (emp!=null){
            clienteDao.eliminarCliente(cliente);
            return "ok";}
        else
        {
            throw new NoExisteObjetoException("No existe el empleado indicado");            
        }
    }
    
}
